#define _CRT_SECURE_NO_WARNINGS 1
#include"Sort.h"
#include"stack.h"


void BubbleSortTest()
{

	int a[10] = { 5,3,1,9,6,8,7,3,2,7 };
	int sz = sizeof(a) / sizeof(a[0]);
	BubbleSort(a, sz );
 	PrintSort(a, sz);
}


void InsertSortTest()
{
	int a[10] = { 5,3,1,9,6,8,7,3,2,7 };
	int sz = sizeof(a) / sizeof(a[0]);
	InsertSort(a, sz);
	PrintSort(a, sz);
}

void ShellSortTest()
{
	int a[10] = { 9,3,1,9,6,8,7,3,2,7 };
	int sz = sizeof(a) / sizeof(a[0]);
	PrintSort(a, sz);
	ShellSort(a, sz);
	PrintSort(a, sz);
}

void QuickSort1Test()
{
	int a[10] = { 5,3,1,9,6,8,7,3,2,7 };
	int sz = sizeof(a) / sizeof(a[0]);
	PrintSort(a, sz);
	QuickSort1(a, 0, sz - 1);
	PrintSort(a, sz);
}
void QuickSort2Test()
{
	int a[10] = { 5,3,1,9,6,8,7,3,2,7 };
	int sz = sizeof(a) / sizeof(a[0]);
	//PrintSort(a, sz);
	//Quicksorttest(a, 0, sz - 1);
	//PrintSort(a, sz);
}
void stacktest()
{
	ST st;
	STInit(&st);
	STPush(&st, 9);
	STPush(&st, 1);
	STPush(&st, 5);
	STPush(&st, 3);
	STPush(&st, 6);
	STPush(&st, 7);
	STPush(&st, 8);
	while (!STempety(&st))
	{
		printf("%d ", STTop(&st));
		STPop(&st);
	}
	STDestroy(&st);

}
void Quicksorttest(int *a,int left ,int right)
{
	ST st;
	STInit(&st);
	STPush(&st, right);
	STPush(&st, left);
	while (!STempety(&st))
	{
		int begin = STTop(&st);
		STPop(&st);
		int end = STTop(&st);
		STPop(&st);
		int keyi = QuickSort1(a, begin, end);
		if (keyi + 1 < end)
		{
			STPush(&st, end);
			STPush(&st, keyi + 1);
		}
		if (begin < keyi - 1)
		{
			STPush(&st, keyi - 1);
			STPush(&st, begin);
		}
	}
	STDestroy(&st);

}

int main()
{
	//BubbleSortTest();
	//InsertSortTest();
	//ShellSortTest();
	//QuickSort1Test();
	//QuickSort1Test();
	//stacktest();
	int a[10] = { 5,3,1,9,6,8,7,3,2,7 };
	int sz = sizeof(a) / sizeof(a[0]);
	Quicksorttest(a,0,sz-1);
	return 0;
}